package com.common.properties;

import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.util.StrUtil;
import com.common.cache.CacheCommon;
import com.common.cache.CacheUtil;
import com.common.comm.ResultEnum;
import com.common.comm.SystemEnum;
import com.common.exception.CommException;
import com.common.lang.Assert;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

/**
 * @author ZhangHaiWen
 * @title: ConfigProperties
 * @projectName minipasscheck
 * @description: config 配置类
 * @date 2020/12/179:16
 */
public class ConfigProperties {

    private volatile static Properties properties;

    private volatile static ConfigProperties configProperties;

    /**
     * 单例读取配置文件
     * @return
     */
    public static ConfigProperties getInstance(String propertiesPath) {
        if (configProperties == null) {
            synchronized (ConfigProperties.class) {
                if (configProperties == null) {
                    configProperties = new ConfigProperties(propertiesPath);
                }
            }
        }
        return configProperties;
    }

    /**
     * 私有化构造方法
     */
    private ConfigProperties(String propertiesPath){
        try {
            ClassPathResource resource = new ClassPathResource(propertiesPath);
            properties = new Properties();
            properties.load(resource.getStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取配置文件
     * @param key
     * @return
     */
    private String getPro(String key){
        // 判断key是否为空
        Assert.notNull(key,SystemEnum.CONFIG_KEY_NULL);
        String property = properties.getProperty(key.trim());
        // 判断返回值是否为空
        Assert.notNull(property,SystemEnum.CONFIG_VALUE_NULL);
        return property.trim();
    }

    /**
     * 1.首先调用 getInstance 方法加载配置文件
     * 获取所有的Key Value 将信息存储到内存中
     * @return
     */
    public void loadPros(CacheCommon cacheCommon){
        // 配置文件异常返回
        Assert.notNull(properties,SystemEnum.CONFIG_INIT_ERROR);
        Enumeration<?> enumeration = properties.propertyNames();
        CacheUtil.clear(cacheCommon);
        while (enumeration.hasMoreElements()){
            String key = String.valueOf(enumeration.nextElement());
            String value = getPro(key);
            CacheUtil.save(cacheCommon,key,value);
        }
    }

}
